{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Abstractive"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-info\">\n",
    "\n",
    "This tutorial is available as an IPython notebook at [Malaya/example/abstractive-summarization](https://github.com/huseinzol05/Malaya/tree/master/example/abstractive-summarization).\n",
    "    \n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-warning\">\n",
    "\n",
    "This module only trained on standard language structure, so it is not save to use it for local language structure.\n",
    "    \n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-warning\">\n",
    "\n",
    "This module trained heavily on news and articles structure.\n",
    "    \n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-warning\">\n",
    "\n",
    "Results generated using stochastic methods.\n",
    "    \n",
    "</div>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "\n",
    "os.environ['CUDA_VISIBLE_DEVICES'] = ''"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import logging\n",
    "\n",
    "logging.basicConfig(level=logging.INFO)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/husein/.local/lib/python3.8/site-packages/bitsandbytes/cextension.py:34: UserWarning: The installed version of bitsandbytes was compiled without GPU support. 8-bit optimizers, 8-bit multiplication, and GPU quantization are unavailable.\n",
      "  warn(\"The installed version of bitsandbytes was compiled without GPU support. \"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "/home/husein/.local/lib/python3.8/site-packages/bitsandbytes/libbitsandbytes_cpu.so: undefined symbol: cadam32bit_grad_fp32\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:torch.distributed.nn.jit.instantiator:Created a temporary directory at /tmp/tmphbvdchu5\n",
      "INFO:torch.distributed.nn.jit.instantiator:Writing /tmp/tmphbvdchu5/_remote_module_non_scriptable.py\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 2.84 s, sys: 3 s, total: 5.84 s\n",
      "Wall time: 2.19 s\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/husein/dev/malaya/malaya/tokenizer.py:214: FutureWarning: Possible nested set at position 3397\n",
      "  self.tok = re.compile(r'({})'.format('|'.join(pipeline)))\n",
      "/home/husein/dev/malaya/malaya/tokenizer.py:214: FutureWarning: Possible nested set at position 3927\n",
      "  self.tok = re.compile(r'({})'.format('|'.join(pipeline)))\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "import malaya\n",
    "from pprint import pprint"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**link**: https://www.hmetro.com.my/mutakhir/2020/05/580438/peletakan-jawatan-tun-m-ditolak-bukan-lagi-isu\n",
    "\n",
    "**Title**: Peletakan jawatan Tun M ditolak, bukan lagi isu.\n",
    "\n",
    "**Body**: PELETAKAN jawatan Tun Dr Mahathir Mohamad sebagai Pengerusi Parti Pribumi Bersatu Malaysia (Bersatu) ditolak di dalam mesyuarat khas Majlis Pimpinan Tertinggi (MPT) pada 24 Februari lalu.\n",
    "\n",
    "Justeru, tidak timbul soal peletakan jawatan itu sah atau tidak kerana ia sudah pun diputuskan pada peringkat parti yang dipersetujui semua termasuk Presiden, Tan Sri Muhyiddin Yassin.\n",
    "\n",
    "Bekas Setiausaha Agung Bersatu Datuk Marzuki Yahya berkata, pada mesyuarat itu MPT sebulat suara menolak peletakan jawatan Dr Mahathir.\n",
    "\n",
    "\"Jadi ini agak berlawanan dengan keputusan yang kita sudah buat. Saya tak faham bagaimana Jabatan Pendaftar Pertubuhan Malaysia (JPPM) kata peletakan jawatan itu sah sedangkan kita sudah buat keputusan di dalam mesyuarat, bukan seorang dua yang buat keputusan.\n",
    "\n",
    "\"Semua keputusan mesti dibuat melalui parti. Walau apa juga perbincangan dibuat di luar daripada keputusan mesyuarat, ini bukan keputusan parti.\n",
    "\n",
    "\"Apa locus standy yang ada pada Setiausaha Kerja untuk membawa perkara ini kepada JPPM. Seharusnya ia dibawa kepada Setiausaha Agung sebagai pentadbir kepada parti,\" katanya kepada Harian Metro.\n",
    "\n",
    "Beliau mengulas laporan media tempatan hari ini mengenai pengesahan JPPM bahawa Dr Mahathir tidak lagi menjadi Pengerusi Bersatu berikutan peletakan jawatannya di tengah-tengah pergolakan politik pada akhir Februari adalah sah.\n",
    "\n",
    "Laporan itu juga menyatakan, kedudukan Muhyiddin Yassin memangku jawatan itu juga sah.\n",
    "\n",
    "Menurutnya, memang betul Dr Mahathir menghantar surat peletakan jawatan, tetapi ditolak oleh MPT.\n",
    "\n",
    "\"Fasal yang disebut itu terpakai sekiranya berhenti atau diberhentikan, tetapi ini mesyuarat sudah menolak,\" katanya.\n",
    "\n",
    "Marzuki turut mempersoal kenyataan media yang dibuat beberapa pimpinan parti itu hari ini yang menyatakan sokongan kepada Perikatan Nasional.\n",
    "\n",
    "\"Kenyataan media bukanlah keputusan rasmi. Walaupun kita buat 1,000 kenyataan sekali pun ia tetap tidak merubah keputusan yang sudah dibuat di dalam mesyuarat. Kita catat di dalam minit apa yang berlaku di dalam mesyuarat,\" katanya."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "string = \"\"\"\n",
    "PELETAKAN jawatan Tun Dr Mahathir Mohamad sebagai Pengerusi Parti Pribumi Bersatu Malaysia (Bersatu) ditolak di dalam mesyuarat khas Majlis Pimpinan Tertinggi (MPT) pada 24 Februari lalu.\n",
    "\n",
    "Justeru, tidak timbul soal peletakan jawatan itu sah atau tidak kerana ia sudah pun diputuskan pada peringkat parti yang dipersetujui semua termasuk Presiden, Tan Sri Muhyiddin Yassin.\n",
    "\n",
    "Bekas Setiausaha Agung Bersatu Datuk Marzuki Yahya berkata, pada mesyuarat itu MPT sebulat suara menolak peletakan jawatan Dr Mahathir.\n",
    "\n",
    "\"Jadi ini agak berlawanan dengan keputusan yang kita sudah buat. Saya tak faham bagaimana Jabatan Pendaftar Pertubuhan Malaysia (JPPM) kata peletakan jawatan itu sah sedangkan kita sudah buat keputusan di dalam mesyuarat, bukan seorang dua yang buat keputusan.\n",
    "\n",
    "\"Semua keputusan mesti dibuat melalui parti. Walau apa juga perbincangan dibuat di luar daripada keputusan mesyuarat, ini bukan keputusan parti.\n",
    "\n",
    "\"Apa locus standy yang ada pada Setiausaha Kerja untuk membawa perkara ini kepada JPPM. Seharusnya ia dibawa kepada Setiausaha Agung sebagai pentadbir kepada parti,\" katanya kepada Harian Metro.\n",
    "\n",
    "Beliau mengulas laporan media tempatan hari ini mengenai pengesahan JPPM bahawa Dr Mahathir tidak lagi menjadi Pengerusi Bersatu berikutan peletakan jawatannya di tengah-tengah pergolakan politik pada akhir Februari adalah sah.\n",
    "\n",
    "Laporan itu juga menyatakan, kedudukan Muhyiddin Yassin memangku jawatan itu juga sah.\n",
    "\n",
    "Menurutnya, memang betul Dr Mahathir menghantar surat peletakan jawatan, tetapi ditolak oleh MPT.\n",
    "\n",
    "\"Fasal yang disebut itu terpakai sekiranya berhenti atau diberhentikan, tetapi ini mesyuarat sudah menolak,\" katanya.\n",
    "\n",
    "Marzuki turut mempersoal kenyataan media yang dibuat beberapa pimpinan parti itu hari ini yang menyatakan sokongan kepada Perikatan Nasional.\n",
    "\n",
    "\"Kenyataan media bukanlah keputusan rasmi. Walaupun kita buat 1,000 kenyataan sekali pun ia tetap tidak merubah keputusan yang sudah dibuat di dalam mesyuarat. Kita catat di dalam minit apa yang berlaku di dalam mesyuarat,\" katanya.\n",
    "\"\"\"\n",
    "\n",
    "string = cleaning(string)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Link**: https://www.malaysiakini.com/news/525953\n",
    "\n",
    "**Title**: Mahathir jangan hipokrit isu kes mahkamah Riza, kata Takiyuddin\n",
    "\n",
    "**Body**: Menteri undang-undang Takiyuddin Hassan berkata kerajaan berharap Dr Mahathir Mohamad tidak bersikap hipokrit dengan mengatakan beliau tertanya-tanya dan tidak faham dengan keputusan mahkamah melepas tanpa membebaskan (DNAA) Riza Aziz, anak tiri bekas perdana menteri Najib Razak, dalam kes pengubahan wang haram membabitkan dana 1MDB.\n",
    "\n",
    "Pemimpin PAS itu berkata ini kerana keputusan itu dibuat oleh peguam negara dan dilaksanakan oleh timbalan pendakwa raya yang mengendalikan kes tersebut pada akhir 2019.\n",
    "\n",
    "“Saya merujuk kepada kenyataan Dr Mahathir tentang tindakan Mahkamah Sesyen memberikan pelepasan tanpa pembebasan (discharge not amounting to acquittal) kepada Riza Aziz baru-baru ini.\n",
    "\n",
    "“Kerajaan berharap Dr Mahathir tidak bersikap hipokrit dengan mengatakan beliau ‘tertanya-tanya’, keliru dan tidak faham terhadap suatu keputusan yang dibuat oleh Peguam Negara dan dilaksanakan oleh Timbalan Pendakwa Raya yang mengendalikan kes ini pada akhir tahun 2019,” katanya dalam satu kenyataan hari ini.\n",
    "\n",
    "Riza pada Khamis dilepas tanpa dibebaskan daripada lima pertuduhan pengubahan wang berjumlah AS$248 juta (RM1.08 bilion).\n",
    "\n",
    "Dalam persetujuan yang dicapai antara pihak Riza dan pendakwaan, beliau dilepas tanpa dibebaskan atas pertuduhan itu dengan syarat memulangkan semula aset dari luar negara dengan nilai anggaran AS$107.3 juta (RM465.3 juta).\n",
    "\n",
    "Ekoran itu, Mahathir antara lain menyuarakan kekhuatirannya berkenaan persetujuan itu dan mempersoalkan jika pihak yang didakwa atas tuduhan mencuri boleh terlepas daripada tindakan jika memulangkan semula apa yang dicurinya.\n",
    "\n",
    "\"Dia curi berbilion-bilion...Dia bagi balik kepada kerajaan. Dia kata kepada kerajaan, 'Nah, duit yang aku curi. Sekarang ini, jangan ambil tindakan terhadap aku.' Kita pun kata, 'Sudah bagi balik duit okey lah',\" katanya.\n",
    "\n",
    "Menjelaskan bahawa beliau tidak mempersoalkan keputusan mahkamah, Mahathir pada masa sama berkata ia menunjukkan undang-undang mungkin perlu dipinda.\n",
    "\n",
    "Mengulas lanjut, Takiyuddin yang juga setiausaha agung PAS berkata\n",
    "kenyataan Mahathir tidak munasabah sebagai bekas perdana menteri.\n",
    "\n",
    "\"Kerajaan berharap Dr Mahathir tidak terus bertindak mengelirukan rakyat dengan mengatakan beliau ‘keliru’.\n",
    "\n",
    "“Kerajaan PN akan terus bertindak mengikut undang-undang dan berpegang kepada prinsip kebebasan badan kehakiman dan proses perundangan yang sah,” katanya."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "string2 = \"\"\"\n",
    "Menteri undang-undang Takiyuddin Hassan berkata kerajaan berharap Dr Mahathir Mohamad tidak bersikap hipokrit dengan mengatakan beliau tertanya-tanya dan tidak faham dengan keputusan mahkamah melepas tanpa membebaskan (DNAA) Riza Aziz, anak tiri bekas perdana menteri Najib Razak, dalam kes pengubahan wang haram membabitkan dana 1MDB.\n",
    "\n",
    "Pemimpin PAS itu berkata ini kerana keputusan itu dibuat oleh peguam negara dan dilaksanakan oleh timbalan pendakwa raya yang mengendalikan kes tersebut pada akhir 2019.\n",
    "\n",
    "“Saya merujuk kepada kenyataan Dr Mahathir tentang tindakan Mahkamah Sesyen memberikan pelepasan tanpa pembebasan (discharge not amounting to acquittal) kepada Riza Aziz baru-baru ini.\n",
    "\n",
    "“Kerajaan berharap Dr Mahathir tidak bersikap hipokrit dengan mengatakan beliau ‘tertanya-tanya’, keliru dan tidak faham terhadap suatu keputusan yang dibuat oleh Peguam Negara dan dilaksanakan oleh Timbalan Pendakwa Raya yang mengendalikan kes ini pada akhir tahun 2019,” katanya dalam satu kenyataan hari ini.\n",
    "\n",
    "Riza pada Khamis dilepas tanpa dibebaskan daripada lima pertuduhan pengubahan wang berjumlah AS$248 juta (RM1.08 bilion).\n",
    "\n",
    "Dalam persetujuan yang dicapai antara pihak Riza dan pendakwaan, beliau dilepas tanpa dibebaskan atas pertuduhan itu dengan syarat memulangkan semula aset dari luar negara dengan nilai anggaran AS$107.3 juta (RM465.3 juta).\n",
    "\n",
    "Ekoran itu, Mahathir antara lain menyuarakan kekhuatirannya berkenaan persetujuan itu dan mempersoalkan jika pihak yang didakwa atas tuduhan mencuri boleh terlepas daripada tindakan jika memulangkan semula apa yang dicurinya.\n",
    "\n",
    "\"Dia curi berbilion-bilion...Dia bagi balik kepada kerajaan. Dia kata kepada kerajaan, 'Nah, duit yang aku curi. Sekarang ini, jangan ambil tindakan terhadap aku.' Kita pun kata, 'Sudah bagi balik duit okey lah',\" katanya.\n",
    "\n",
    "Menjelaskan bahawa beliau tidak mempersoalkan keputusan mahkamah, Mahathir pada masa sama berkata ia menunjukkan undang-undang mungkin perlu dipinda.\n",
    "\n",
    "Mengulas lanjut, Takiyuddin yang juga setiausaha agung PAS berkata\n",
    "kenyataan Mahathir tidak munasabah sebagai bekas perdana menteri.\n",
    "\n",
    "\"Kerajaan berharap Dr Mahathir tidak terus bertindak mengelirukan rakyat dengan mengatakan beliau ‘keliru’.\n",
    "\n",
    "“Kerajaan PN akan terus bertindak mengikut undang-undang dan berpegang kepada prinsip kebebasan badan kehakiman dan proses perundangan yang sah,” katanya.\n",
    "\"\"\"\n",
    "\n",
    "string2 = cleaning(string2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "string3 = \"\"\"\n",
    "The future looks bleak for Gerakan Tanah Air (GTA), as the possibility of building alliances with other political coalitions slowly withers.\n",
    "\n",
    "Experts believe the unofficial pact is in for a dismal showing and may end up being \"buried\" in the 15th General Election (GE15).\n",
    "\n",
    "They said GTA, which aims to contest more than 120 seats, might end up securing only five seats at most despite having a notable figure — former prime minister Tun Dr Mahathir Mohamad — as its chairman.\n",
    "\n",
    "Associate Professor Dr Awang Azman Awang Pawi said when Dr Mahathir headed Parti Pribumi Bersatu Malaysia (Bersatu) in the previous general election, the party secured only 13 seats.\n",
    "\n",
    "\"Dr Mahathir won only 13 when he was with Bersatu. It is likely that he will do much less under GTA.\n",
    "\n",
    "\"GTA's political future will likely be buried sooner than it thinks,\" he told the New Sunday Times yesterday.\n",
    "\n",
    "The political analyst from Universiti Malaya said GTA's plan to contest 120 seats would be an obstacle for the pact, as the political coalition would find it hard to find worthy and acceptable candidates.\n",
    "\n",
    "GTA is made up of Parti Pejuang Tanah Air (Pejuang), Parti Bumiputera Perkasa Malaysia, Barisan Jemaah Islamiah Se-Malaysia and Parti Ikatan India Muslim Nasional.\n",
    "\n",
    "GTA had previously courted Perikatan Nasional (PN) and Pakatan Harapan (PH) in the run-up to the election.\n",
    "\n",
    "Dr Mahathir had earlier last week said he was willing to \"set his ego aside\" to unite the opposition parties to offer a strong challenge against Barisan Nasional (BN).\n",
    "\n",
    "Last Thursday, PN shut its doors to any cooperation with GTA for GE15, saying it would move ahead with its component parties.\n",
    "\n",
    "So far, GTA has announced eight candidates for GE15: Dr Mahathir for the Langkawi parliamentary seat, Datuk Seri Mukhriz Mahathir for Jerlun, Datuk Amiruddin Hamzah for Kubang Pasu, Datin Che Asmah Ibrahim for Sepang, Mior Nor Haidir Suhaimi for Tapah, Harumaini Omar for Hulu Selangor, Mohd Shaid Rosli for Kuala Selangor and Datuk Seri Khairuddin Abu Hassan for Titiwangsa.\n",
    "\n",
    "Another political analyst, Azmi Hassan, predicted that GTA would have to go it alone, and did not see any chance that Pakatan Harapan (PH) would accept the pact into its fold.\n",
    "\n",
    "He said GTA had little to offer to PH.\n",
    "\n",
    "\"They (GTA) have nothing to add to PH, unlike the Malaysian United Democratic Alliance.\n",
    "\n",
    "\"GTA has no political history, and its performance in the Johor election showed how weak Pejuang's influence is.\"\n",
    "\n",
    "He said GTA should concentrate in areas that it could perform well, such as Kedah where Dr Mahathir and Mukhriz would defend their seats.\n",
    "\"\"\"\n",
    "\n",
    "string3 = cleaning(string3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### List available HuggingFace models"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'mesolitica/finetune-summarization-t5-small-standard-bahasa-cased': {'Size (MB)': 242,\n",
       "  'ROUGE-1': 0.75721802,\n",
       "  'ROUGE-2': 0.496729027,\n",
       "  'ROUGE-L': 0.304021823,\n",
       "  'Suggested length': 1024},\n",
       " 'mesolitica/finetune-summarization-t5-base-standard-bahasa-cased': {'Size (MB)': 892,\n",
       "  'ROUGE-1': 0.7132268255,\n",
       "  'ROUGE-2': 0.470135011,\n",
       "  'ROUGE-L': 0.366797009,\n",
       "  'Suggested length': 1024},\n",
       " 'mesolitica/finetune-summarization-ms-t5-small-standard-bahasa-cased': {'Size (MB)': 242,\n",
       "  'ROUGE-1': 0.742572468,\n",
       "  'ROUGE-2': 0.50196339,\n",
       "  'ROUGE-L': 0.3741226432,\n",
       "  'Suggested length': 1024},\n",
       " 'mesolitica/finetune-summarization-ms-t5-base-standard-bahasa-cased': {'Size (MB)': 892,\n",
       "  'ROUGE-1': 0.728116529,\n",
       "  'ROUGE-2': 0.49656772621,\n",
       "  'ROUGE-L': 0.376577199,\n",
       "  'Suggested length': 1024}}"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "malaya.summarization.abstractive.available_huggingface"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tested on translated validation set CNN Daily Mail, https://huggingface.co/datasets/mesolitica/translated-cnn-dailymail\n",
      "tested on translated test set Xwikis, https://huggingface.co/datasets/mesolitica/translated-xwikis\n"
     ]
    }
   ],
   "source": [
    "print(malaya.summarization.abstractive.info)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Load HuggingFace model\n",
    "\n",
    "```python\n",
    "def huggingface(\n",
    "    model: str = 'mesolitica/finetune-summarization-t5-small-standard-bahasa-cased',\n",
    "    force_check: bool = True,\n",
    "    **kwargs,\n",
    "):\n",
    "    \"\"\"\n",
    "    Load HuggingFace model to abstractive summarization.\n",
    "\n",
    "    Parameters\n",
    "    ----------\n",
    "    model: str, optional (default='mesolitica/finetune-summarization-t5-small-standard-bahasa-cased')\n",
    "        Check available models at `malaya.summarization.abstractive.available_huggingface`.\n",
    "    force_check: bool, optional (default=True)\n",
    "        Force check model one of malaya model.\n",
    "        Set to False if you have your own huggingface model.\n",
    "\n",
    "    Returns\n",
    "    -------\n",
    "    result: malaya.torch_model.huggingface.Summarization\n",
    "    \"\"\"\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = malaya.summarization.abstractive.huggingface()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "model_base = malaya.summarization.abstractive.huggingface(model = 'mesolitica/finetune-summarization-t5-base-standard-bahasa-cased')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Summarize\n",
    "\n",
    "```python\n",
    "def generate(\n",
    "    self,\n",
    "    strings: List[str],\n",
    "    postprocess: bool = True,\n",
    "    n: int = 2,\n",
    "    threshold: float = 0.1,\n",
    "    reject_similarity: float = 0.85,\n",
    "    **kwargs,\n",
    "):\n",
    "    \"\"\"\n",
    "    Generate texts from the input.\n",
    "\n",
    "    Parameters\n",
    "    ----------\n",
    "    strings : List[str]\n",
    "    postprocess: bool, optional (default=False)\n",
    "        If True, will filter sentence generated using ROUGE score and removed biased generated international news publisher.\n",
    "    n: int, optional (default=2)\n",
    "        N size of rouge to filter\n",
    "    threshold: float, optional (default=0.1)\n",
    "        minimum threshold for N rouge score to select a sentence.\n",
    "    reject_similarity: float, optional (default=0.85)\n",
    "        reject similar sentences while maintain position.\n",
    "    **kwargs: vector arguments pass to huggingface `generate` method.\n",
    "        Read more at https://huggingface.co/docs/transformers/main_classes/text_generation\n",
    "\n",
    "    Returns\n",
    "    -------\n",
    "    result: List[str]\n",
    "    \"\"\"\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/husein/.local/lib/python3.8/site-packages/transformers/generation/configuration_utils.py:362: UserWarning: `do_sample` is set to `False`. However, `temperature` is set to `0.5` -- this flag is only used in sample-based generation modes. You should set `do_sample=True` or unset `temperature`.\n",
      "  warnings.warn(\n",
      "spaces_between_special_tokens is deprecated and will be removed in transformers v5. It was adding spaces between `added_tokens`, not special tokens, and does not exist in our fast implementation. Future tokenizers will handle the decoding process on a per-model rule.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['Tun Dr Mahathir Mohamad telah menjadi Pengerusi Parti Pribumi Bersatu '\n",
      " 'Malaysia. Ia ditolak di dalam mesyuarat Majlis Pimpinan Tertinggi pada 24 '\n",
      " 'Februari lalu. Ahli Parlimen sebulat suara menolak peletakan jawatan itu '\n",
      " 'sebagai sah.',\n",
      " 'Menteri undang-undang Takiyuddin Hassan mengatakan bahawa kerajaan berharap '\n",
      " 'Dr Mahathir tidak bersikap hipokrit. Riza Aziz, anak tiri Najib Razak, '\n",
      " 'dibebaskan tanpa pembebasan. Riza dilepas tanpa dibebaskan dari lima tuduhan '\n",
      " 'pengubahan wang haram berjumlah AS $ 248 juta (RM1.08 bilion).']\n",
      "CPU times: user 9.36 s, sys: 0 ns, total: 9.36 s\n",
      "Wall time: 836 ms\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "\n",
    "pprint(model.generate([string, string2], max_length = 256, temperature = 0.5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['Bekas Setiausaha Agung Bersatu Marzuki Yahya mengatakan peletakan jawatan '\n",
      " \"itu sah. Marzuki mengatakan bahawa ia 'agak bertentangan dengan keputusan \"\n",
      " \"yang kita buat'.\",\n",
      " 'Riza Aziz dibebaskan dari lima tuduhan pengubahan wang haram berjumlah AS $ '\n",
      " '248 juta (RM1.08 bilion) Riza pada hari Khamis dibebaskan tanpa dibebaskan '\n",
      " 'dari lima tuduhan pengubahan wang haram berjumlah AS $ 248 juta (RM1.08 '\n",
      " 'bilion) Riza pada hari Khamis dibebaskan tanpa dibebaskan dari lima tuduhan '\n",
      " 'pengubahan wang haram berjumlah AS $ 248 juta (RM1.08 bilion). Menteri '\n",
      " 'undang-undang Takiyuddin Hassan mengatakan bahawa dia tertanya-tanya dan '\n",
      " 'tidak faham dengan keputusan mahkamah.']\n",
      "CPU times: user 46.5 s, sys: 17.8 ms, total: 46.5 s\n",
      "Wall time: 3.99 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "\n",
    "pprint(model_base.generate([string, string2], max_length = 256, temperature = 0.5))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Good thing about HuggingFace\n",
    "\n",
    "In `generate` method, you can do greedy, beam, sampling, nucleus decoder and so much more, read it at https://huggingface.co/blog/how-to-generate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['Anggota Parlimen menolak peletakan jawatan Dr M Mohamad pada mesyuarat awal '\n",
      " 'Februari. Setiausaha Agung Bersatu Datuk Marzuki Yahya mengatakan jawatan '\n",
      " 'itu sah. Semalam menuduh laporan media tempatan bahawa Dr Mahathir tidak '\n",
      " 'lagi menjadi Pengerusi Bersatu.',\n",
      " 'Dr Mahathir Mohamad telah diberhentikan sebagai Pengerusi Parti Pribumi '\n",
      " 'Bersatu Malaysia. Pada mesyuarat khas Majlis Pimpinan Tertinggi (MPT) dia '\n",
      " 'menolak peletakan jawatannya. Namun, tidak ada persoalan berapa banyak '\n",
      " 'peletakan jawatan itu perlu dilakukan.',\n",
      " 'PM sudah melakukan laporan mengenai pengunduran dirinya sebagai Pengerusi '\n",
      " 'Bersatu Malaysia. Tun Mahathir Mohamad adalah Pengerusi Parti Pribumi '\n",
      " 'Bersatu Malaysia (Bersatu) yang, menurut laporan itu, enggan di hadapan '\n",
      " 'Majlis Pimpinan Tertinggi yang membubarkan jawatankuasa itu.']\n",
      "CPU times: user 8.18 s, sys: 14.9 ms, total: 8.19 s\n",
      "Wall time: 707 ms\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "\n",
    "pprint(model.generate([string], \n",
    "    do_sample=True, \n",
    "    max_length=256, \n",
    "    top_p=0.92, \n",
    "    top_k=0,\n",
    "    num_return_sequences=3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['Datuk Marzuki Yahya mengatakan peletakan jawatan itu sah pada 24 Februari. '\n",
      " 'Bekas Setiausaha Agung Bersatu Marzuki berkata, peletakan jawatan itu juga '\n",
      " 'sah.',\n",
      " 'MB Malaysia Mohamad mengatakan peletakan jawatan itu sama sekali tidak sah. '\n",
      " 'Kepujian itu dibuat pada peringkat parti yang dipersetujui dengan semua '\n",
      " 'termasuk PM. Bekas Setiausaha Agung Bersatu Marzuki Yahya mengatakan semua '\n",
      " 'keputusan mesti dibuat melalui parti.',\n",
      " 'Dr Mahathir Mohamad terus duduk sebagai ketua parti pada Februari lalu. '\n",
      " 'Tetapi Anwar Ibrahim mengatakan ia telah ditolak oleh MPT. Datuk Marzuki '\n",
      " \"Yahya berkata, peletakan jawatan itu sah. Marzuki berkata, ia 'agak \"\n",
      " \"bertentangan dengan keputusan yang kita buat'.\"]\n"
     ]
    }
   ],
   "source": [
    "pprint(model_base.generate([string], \n",
    "    do_sample=True, \n",
    "    max_length=256, \n",
    "    top_p=0.92, \n",
    "    top_k=0,\n",
    "    num_return_sequences=3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['Dr Mahathir Mohamad melepaskan tanpa dibebaskan dari lima pertuduhan '\n",
      " 'pengubahan wang haram. Riza Aziz, anak tiri Najib Razak, dituduh membunuh '\n",
      " '1MDB.',\n",
      " 'Menteri undang-undang Takiyuddin Hassan berkata, kerajaan berharap Dr '\n",
      " \"Mahathir tidak bersikap hipokrit dengan berkata beliau 'terkejut' dan tidak \"\n",
      " 'faham dengan keputusan mahkamah mengeluarkan lesen daripada Riza Aziz.',\n",
      " 'Menteri mengatakan kerajaan berharap Dr Mahathir tidak bersikap hipokrit. '\n",
      " \"Kata dia 'tertanya-tanya' dan tidak faham dengan keputusan mahkamah. Riza \"\n",
      " 'Aziz dibebaskan tanpa dibebaskan dari lima tuduhan pengubahan wang haram.']\n",
      "CPU times: user 8.8 s, sys: 0 ns, total: 8.8 s\n",
      "Wall time: 756 ms\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "\n",
    "pprint(model.generate([string2], \n",
    "    do_sample=True, \n",
    "    max_length=256, \n",
    "    top_p=0.92, \n",
    "    top_k=0,\n",
    "    num_return_sequences=3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['Riza Aziz telah berada di mahkamah menyelesaikan pengubahan wang haram 1MDB. '\n",
      " 'Pihaknya mengeluarkannya tanpa dibebaskan atas tuduhan pengubahan wang '\n",
      " 'haram. Rampage dihentikan atas tuduhan yang boleh dibatalkan oleh pelakunya. '\n",
      " 'Takiyuddin Hassan mengatakan bahawa dia tidak pernah mempersoalkan keputusan '\n",
      " \"mahkamah. Beliau berkata: 'Kerajaan berharap Dr Mahathir tidak bersikap \"\n",
      " \"hipokrit... kata dia 'keliru'.\",\n",
      " 'Riza Aziz diberi pelepasan tanpa pembebasan dalam kes rasuah 1MDB. Dia '\n",
      " 'dibebaskan tanpa dibebaskan daripada tuduhan pengubahan wang haram. Bekas '\n",
      " 'perdana menteri Najib Razak ketika itu melanggar perjanjian yang menelan '\n",
      " 'belanja AS $ 243 juta (PS 1.08 bilion) Parlimen PAS mengatakan bahawa '\n",
      " 'pengisytiharan itu tidak boleh diterima oleh semua rakyat yang mempersoalkan '\n",
      " 'mengapa dia menjadi PM.',\n",
      " 'Riza Aziz dituduh diceraikan dari kes 1MDB di Seksyen 4 Perlembagaan. Riza '\n",
      " 'didakwa atas lima tuduhan pengubahan wang haram bernilai AS $ 248 juta '\n",
      " '(RM1.08 bilion) Perdana Menteri Takiyuddin Hassan mengatakan keputusan '\n",
      " \"mahkamah telah dilaksanakan oleh Timbalan Pendakwa raya. Dia berkata: 'Dr \"\n",
      " 'Mahathir bertanya-tanya, keliru dan tidak faham terhadap keputusan yang '\n",
      " \"dibuat oleh Peguam Negara'.\"]\n",
      "CPU times: user 37.9 s, sys: 40.1 ms, total: 38 s\n",
      "Wall time: 3.22 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "\n",
    "pprint(model_base.generate([string2], \n",
    "    do_sample=True, \n",
    "    max_length=256, \n",
    "    top_p=0.92, \n",
    "    top_k=0,\n",
    "    num_return_sequences=3))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### able to infer for mixed MS and EN\n",
    "\n",
    "Make sure to set `threshold=0.0` if `postprocess=True` or else postprocess function will return an error."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['Ahli politik mengatakan perjanjian tidak rasmi adalah cara yang baik untuk '\n",
      " 'menjalankan parlimen. Mereka mengatakan GTA akan bertanding lebih daripada '\n",
      " '120 kerusi tetapi hanya dapat memperoleh lima kerusi. GTA sebelum ini '\n",
      " 'mengancam Perikatan Nasional dan Pakatan Harapan.',\n",
      " 'Gerakan Tanah Air telah melancarkan lapan calon untuk kerusi Parlimen '\n",
      " 'Langkawi. Parti itu telah berjanji untuk menjadi pesaing yang lebih baik '\n",
      " 'daripada pakatan lain. Perdana Menteri Dr Mahathir Mohamad adalah ketua GTA '\n",
      " 'yang dan Mohamed Ramm.',\n",
      " 'Gerakan Tanah Air, di hadapan PN, Pakatan Harapan (PH), akan datang. Akan '\n",
      " 'menang dalam pilihan raya umum ke-15. Sebilangan besar kesepakatan tidak '\n",
      " 'rasmi dimenangi oleh Dr. Mahathir, walaupun hanya memperoleh lima kerusi. '\n",
      " 'GTA dibentuk daripada parti Pejuang Tanah Air, Parti Bumiputera Perkasa '\n",
      " 'Malaysia, Barisan Jemaah Islamiah Se-Malaysia dan Parti Ikatan India Muslim '\n",
      " 'Nasional.']\n",
      "CPU times: user 16.1 s, sys: 12 ms, total: 16.1 s\n",
      "Wall time: 1.38 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "\n",
    "pprint(model.generate([string3], \n",
    "    do_sample=True, \n",
    "    max_length=256, \n",
    "    top_p=0.92, \n",
    "    top_k=0,\n",
    "    num_return_sequences=3, threshold = 0.0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['GTA (Perancis: \"Menjejaskan undi kepada sayap kanan pembangkang\") mungkin '\n",
      " '\"diberkati\" pada Pilihan Raya Umum ke-15 (GE15) Penganalisis mengatakan '\n",
      " 'rancangan GTA untuk bersaing 120 kerusi akan menjadi penghalang. Dr Mahathir '\n",
      " 'hanya memperoleh 13 kerusi berbanding Bersatu.',\n",
      " 'GTA sedang bersiap untuk mengadakan pilihan raya umum ke-15 pada hari '\n",
      " 'Khamis. Keputusan akan mengejutkan orang ramai, kata para penganalisis. Dr '\n",
      " 'Mahathir hanya memperoleh 13 daripada 111 kerusi ketika dia memimpin '\n",
      " 'Bersatu.',\n",
      " 'Gerakan Tanah Air (GTA) merancang untuk bertanding di lebih 120 kerusi. '\n",
      " 'Pakar percaya perjanjian tidak rasmi sedang berlangsung, dan mungkin '\n",
      " '\"dikebumikan\" pada GE15. GTA yang dibentuk oleh pemimpin Tun Dr Mahathir '\n",
      " 'Mohamad (Bersatu) dapat menyelesaikan setelah Dr Mahathir memenangi 13 '\n",
      " 'kerusi. GTA telah mengumumkan lapan calon untuk pilihan raya baru-baru ini: '\n",
      " 'PM Kedah, Kedah, Putrajaya.']\n",
      "CPU times: user 44 s, sys: 32.1 ms, total: 44 s\n",
      "Wall time: 3.71 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "\n",
    "pprint(model_base.generate([string3], \n",
    "    do_sample=True, \n",
    "    max_length=256, \n",
    "    top_p=0.92, \n",
    "    top_k=0,\n",
    "    num_return_sequences=3, threshold = 0.0))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Problem with mixed model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "s = \"\"\"\n",
    "PERDANA Menteri Datuk Seri Anwar Ibrahim sekali lagi mencuri tumpuan netizen selepas gambar-gambarnya menghadiri mesyuarat bersama Ketua Setiausaha Negara, Tan Sri Mohd Zuki Ali viral di media sosial.\n",
    "Menerusi satu ciapan di Twitter, beliau memuat naik beberapa keping foto yang memperlihatkan dirinya menggayakan persalinan baju Melayu berona ungu, lengkap dengan samping dan songkok.\n",
    "Selain itu, beliau turut menyarungkan sepasang capal ketika menghadiri mesyuarat berkenaan.\n",
    "\n",
    "\n",
    "Bagaimanapun, menerusi salah satu gambar, Anwar dilihat membuka capalnya ketika sedang bermesyuarat dan hal itu mencetus perbincangan dalam kalangan netizen.\n",
    "“Dah la pakai selipar, masa meeting boleh tanggal camtu aje,” ujar seorang netizen.\n",
    "Namun, ciapan tersebut dibalas oleh seorang lagi pengguna Twitter.\n",
    "“Untuk makluman bersama, capal dibenarkan untuk dipakai bersama baju Melayu bersamping. Aku pun baru tahu,” katanya.\n",
    "Selain itu, ada juga antara pengguna media sosial yang memberitahu yang martabat capal lebih tinggi berbanding selipar dan kasut-kasut lain.\n",
    "“Capal actually salah satu pakaian Melayu tradisional. Dipakai bangsawan dan para pahlawan pada zaman dulu kala. Jadi, martabat capal tu lebih tinggi dari selipar dan kasut-kasut lain,” katanya.\n",
    "\n",
    "\"\"\"\n",
    "\n",
    "s = cleaning(s)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['Anwar Ibrahim dilihat membuka capalnya ketika bermesyuarat. Foto-foto itu '\n",
      " 'dibalas oleh seorang lagi pengguna Twitter. Anwar juga dilihat memakai '\n",
      " 'sepasang baju Melayu berona ungu.']\n",
      "CPU times: user 4.35 s, sys: 168 µs, total: 4.35 s\n",
      "Wall time: 366 ms\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "\n",
    "pprint(model.generate([s], max_length = 256, temperature = 0.5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['Datuk Seri Anwar Ibrahim menyiarkan gambar dirinya memakai baju Melayu. Dia '\n",
      " 'juga memakai sepasang topial ketika menghadiri mesyuarat. Tetapi, seorang '\n",
      " \"pengguna Twitter membalas dengan mengatakan bahawa itu adalah'masa pertemuan \"\n",
      " \"boleh tanggal camtu aje'.\"]\n",
      "CPU times: user 14.4 s, sys: 8.45 ms, total: 14.5 s\n",
      "Wall time: 1.21 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "\n",
    "pprint(model_base.generate([s], max_length = 256, temperature = 0.5))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As you can see, `model_base` generated `topial` word, inferred from `capal` -> `cap`, `an` -> `topi`, `al`.\n",
    "\n",
    "Any malay words derived from english or any malay subwords are subset of english, this can confused the model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "model_base_ms = malaya.summarization.abstractive.huggingface(model = 'mesolitica/finetune-summarization-ms-t5-base-standard-bahasa-cased')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['Perdana Menteri Anwar Ibrahim memuat naik gambar di Twitter. Dia memakai '\n",
      " 'baju Melayu berona ungu dan memakai selipar. Tetapi dia dilihat membuka '\n",
      " 'capalnya ketika sedang bermesyuarat.']\n",
      "CPU times: user 15.2 s, sys: 15.4 ms, total: 15.2 s\n",
      "Wall time: 1.27 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "\n",
    "pprint(model_base_ms.generate([s], max_length = 256, temperature = 0.5))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
